package xgin

import (
	"time"

	"github.com/gin-gonic/gin"
)

// 结构转换，将controller返回的数据转换成gin框架所支持的输出形式
// 传入参数f，其格式为：func(*gin.Context) *response.Response
func Convert(f func(*gin.Context) *Response) gin.HandlerFunc {
	return func(c *gin.Context) { // 返回gin.HandlerFunc的无返回值函数（此处直接使用匿名函数进行定义）
		n := time.Now()
		resp := f(c) // 执行传入的函数，用于获取该返回的返回值
		if resp != nil {
			data := resp.GetData()       // 获取Data数据
			switch item := data.(type) { // 根据Data数据进行验证要返回类型
			case string:
				c.String(200, item)
			case gin.H:
				// 注入当前时间
				if _default.NowTimeKey != "" {
					item[_default.NowTimeKey] = time.Now().Format(time.DateTime)
				}
				if _default.RuntimeKey != "" {
					item[_default.RuntimeKey] = time.Now().Sub(n).Milliseconds()
				}
				c.JSON(200, item)
			}
		}
	}
}
